home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 June: Reference Library / Dev.CD Jun 96 RL / Dev.CD Jun 96 RL.toast / What's New? / Development Kits / Speech Recognition Mgr 1.5 / SR Sample Code / IM SR Example / MyNotificationCallBack.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-18  |  2.4 KB  |  83 lines  |  [TEXT/CWIE]

  1. #include <SpeechRecognition.h>
  2.  
  3. extern void     MyProcessRecognitionResult (SRRecognitionResult recResult);
  4.  
  5. pascal OSErr    MyInstallNotificationCallBack (SRRecognizer recognizer);
  6. pascal void        MyRemoveNotificationCallBack (SRRecognizer recognizer);
  7. pascal void        MyIdleCheckForSpeechResult (void);
  8.  
  9. pascal void        MyNotificationCallBack (SRCallBackStruct *param);
  10.  
  11.  
  12. SRRecognitionResult    gLastRecResult;
  13.  
  14. pascal OSErr MyInstallNotificationCallBack (SRRecognizer recognizer)
  15. {
  16.     SRCallBackParam    myCallBackPB;
  17.     
  18.     myCallBackPB.callBack = NewSRCallBackProc (MyNotificationCallBack);
  19.     
  20.     return SRSetProperty (recognizer, kSRCallBackParam, 
  21.                                             &myCallBackPB, sizeof (myCallBackPB));
  22. }
  23.  
  24. pascal void MyRemoveNotificationCallBack (SRRecognizer recognizer)
  25. {
  26.     SRCallBackParam    myCallBackPB;
  27.     SRCallBackUPP     mySavedCallBack;
  28.     Size            myLen;
  29.     OSErr            myErr = noErr;
  30.     
  31.     myLen = sizeof (myCallBackPB);
  32.     myErr = SRGetProperty (recognizer, kSRCallBackParam, &myCallBackPB, &myLen);
  33.     if (myErr == noErr) {
  34.         if (myCallBackPB.callBack != nil) {
  35.             mySavedCallBack = myCallBackPB.callBack;
  36.             
  37.             myCallBackPB.callBack = nil;
  38.             myErr = SRSetProperty (recognizer, kSRCallBackParam, &myCallBackPB, 
  39.                                                         sizeof (myCallBackPB));
  40.             
  41.             DisposeRoutineDescriptor (mySavedCallBack);
  42.         }
  43.     }
  44. }
  45.  
  46. pascal void MyNotificationCallBack (SRCallBackStruct * param)
  47. {
  48.     OSErr        myErr = param->status;
  49.     
  50.     if (!myErr) {
  51.         /* Handle recognition beginning event - the user just started speaking */
  52.         /* Here we just continue speech recognition */
  53.         if ((param->what) & kSRNotifyRecognitionBeginning) {
  54.             SRRecognizer    rec = (SRRecognizer) (param->instance);
  55.             
  56.             myErr = SRContinueRecognition (rec);
  57.         }
  58.         
  59.         /* Handle recognition done event                                    */
  60.         /* Here we save the rec result in gLastRecResult.                     */
  61.         /* At idle time in our event loop, if gLastRecResult != NULL,        */
  62.         /* we call MyProcessRecognitionResult (gLastRecResult)                */
  63.         else if (param->what & kSRNotifyRecognitionDone) {
  64.             SRRecognitionResult recResult = 
  65.                                         (SRRecognitionResult) (param->message);
  66.             if (recResult)
  67.                 gLastRecResult = recResult;
  68.                 /* Note that we might get more than one result before we     */
  69.                 /* get to our idle check, so we should really be putting    */
  70.                 /* this in a queue.                                         */
  71.         }
  72.     }
  73. }
  74.  
  75. /* MyIdleCheckForSpeechResult is called in the event loop */
  76. pascal void MyIdleCheckForSpeechResult (void)
  77. {
  78.     if (gLastRecResult != NULL)
  79.         MyProcessRecognitionResult (gLastRecResult);
  80.     
  81.     gLastRecResult = NULL;
  82. }
  83.